
package upc.jfactory.scp.bl.controller;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;
import upc.jfactory.scp.entidad.Alumno;
import upc.jfactory.scp.entidad.Empresa;
import upc.jfactory.scp.entidad.Postulanteof;
import upc.jfactory.scp.entidad.PuestoOfertado;
import upc.jfactory.scp.jpa.bean.OfertaEmpresa;

import upc.jfactory.scp.jpa.bean.Postulacion;
import upc.jfactory.scp.jpa.bean.Postulante;
import upc.jfactory.scp.jpa.controlador.OfertaEmpresaJpaController;
import upc.jfactory.scp.jpa.controlador.PostulacionJpaController;
import upc.jfactory.scp.jpa.controlador.PostulanteJpaController;
import upc.jfactory.scp.jpa.controlador.exceptions.NonexistentEntityException;
import upc.jfactory.scp.jpa.controlador.exceptions.PreexistingEntityException;

/*import upc.jfactory.scp.componente.WSAlumnoBC;
import upc.jfactory.scp.entidad.Alumno;
import upc.jfactory.scp.entidad.Postulante;
import upc.jfactory.scp.entidad.Rol;
*/
/**
 *
 * @author Diego
 */
public class PostulacionController {
   public PostulacionController(){}
    public List<SelectItem> getPostulacionesxAlumno(int idalumno) {
      List<Postulacion> listapostulaciones= new ArrayList<Postulacion>();
       List<SelectItem> selectpostulacion = new ArrayList<SelectItem>();
       PostulacionJpaController postulacionJpaController = new PostulacionJpaController();
      OfertaEmpresaController ofertaempresacont= new OfertaEmpresaController();

       listapostulaciones= postulacionJpaController.BuscarPostulacionesxalumno(idalumno);
       for (Postulacion postulacion :  listapostulaciones) {
                
             SelectItem select =  new SelectItem(postulacion.getPostulacionId(),ofertaempresacont.DameNombreOfertaXID(postulacion.getOfertaempresaId()));
            selectpostulacion.add(select);
        }
        return selectpostulacion;
    }
    public List<Postulanteof> getPostulacionesxEmpresa() {
      List<Postulacion> listapostulaciones= new ArrayList<Postulacion>();
      List<OfertaEmpresa> listaofertas= new ArrayList<OfertaEmpresa>();
      List<Postulanteof> listapostulantes = new ArrayList<Postulanteof>();
      FacesContext ctx = FacesContext.getCurrentInstance();
      HttpSession session = (HttpSession) ctx.getExternalContext().getSession(true);
      Empresa empresa= (Empresa)session.getAttribute("usuario");
       Postulanteof postulanteof= new Postulanteof();

       AlumnoController alumno = new AlumnoController();
       PostulacionJpaController postulacionJpaController = new PostulacionJpaController();
       OfertaEmpresaController ofertacont= new OfertaEmpresaController();
      OfertaEmpresaJpaController ofertaempresa= new OfertaEmpresaJpaController();
      PostulanteJpaController postulantejpa = new PostulanteJpaController();
        listaofertas= ofertaempresa.BuscarOfertasdeEmpresa(empresa.getEmpresaId());
       for (OfertaEmpresa oferta: listaofertas ){
           listapostulaciones=postulacionJpaController.BuscarPostulacionesxoferta(oferta.getOfertaempresaId());
       for (Postulacion postulacion :  listapostulaciones) {
          Postulante postulante = postulantejpa.findPostulante(postulacion.getPostulanteId());
          postulanteof.setIdPostulante(postulante.getPostulanteId());
          Alumno alumnaso= alumno.GetAlumnoXId(postulante.getPostulanteId());
          postulanteof.setApellidoMaterno(alumnaso.getApellidoMaterno());
          postulanteof.setCodigoAlumno(alumnaso.getCodigoAlumno());
          postulanteof.setApellidoPaterno(alumnaso.getApellidoPaterno());
          postulanteof.setNombreAlumno(alumnaso.getNombreAlumno());
          postulanteof.setIdPuestoOfertado(postulacion.getOfertaempresaId());
          postulanteof.setIdpostulacion(postulacion.getPostulacionId());
          postulanteof.setNombrerol(ofertacont.DameNombreOfertaXID(postulacion.getOfertaempresaId()));
          postulanteof.setNombreCompleto(alumnaso.getNombreAlumno()+" "+alumnaso.getApellidoPaterno()+" "+alumnaso.getApellidoMaterno());
          listapostulantes.add(postulanteof);

            
        }
        
    }
    return listapostulantes;
    }
        public void BorrarPostulacion(int id){
        try {
            PostulacionJpaController postjpa = new PostulacionJpaController();
            postjpa.destroy(id);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(PostulacionController.class.getName()).log(Level.SEVERE, null, ex);
        }
          }
    public int getnumPostulacionesxAlumnoxOfertaLaboral(int idofertaempresa){
     PostulacionJpaController postulacionJpaController = new PostulacionJpaController();
      List<Postulacion> listapostulaciones= new ArrayList<Postulacion>();
      FacesContext ctx = FacesContext.getCurrentInstance();
      HttpSession session = (HttpSession) ctx.getExternalContext().getSession(true);
            Alumno alumno = (Alumno) session.getAttribute("usuario");
            int idalumno = alumno.getIdAlumno();
     listapostulaciones=postulacionJpaController.BuscarPostulacionesDeAlumno(idalumno, idofertaempresa);
     return listapostulaciones.size();
    }
    public List<SelectItem> getEmpresasPostuladasxAlumno(int idalumno) {
      List<OfertaEmpresa> listaempresas= new ArrayList<OfertaEmpresa>();
       List<SelectItem> selectempresas = new ArrayList<SelectItem>();
       PostulacionJpaController postulacionJpaController = new PostulacionJpaController();
      EmpresaController ofertaempresacont= new EmpresaController();


       listaempresas= postulacionJpaController.BuscarEmpresasxalumno(idalumno);
       for (OfertaEmpresa ofertaempresa :  listaempresas) {

             SelectItem select =  new SelectItem(ofertaempresa.getEmpresaId(),ofertaempresacont.GetEmpresa(ofertaempresa.getEmpresaId()));
            selectempresas.add(select);
        }
        return selectempresas;
    }
    public void  crearPostulacion(PuestoOfertado puesto){
        try {
            PostulacionJpaController postulacionjpa = new PostulacionJpaController();
            Postulacion postulacion = new Postulacion();
            postulacion.setOfertaempresaId(puesto.getIdPuestoOfertado());
            FacesContext ctx = FacesContext.getCurrentInstance();
            HttpSession session = (HttpSession) ctx.getExternalContext().getSession(true);
            Alumno alumno = (Alumno) session.getAttribute("usuario");
            postulacion.setPostulanteId(alumno.getIdAlumno());
            Date fecha = new Date(Calendar.getInstance().getTime().getTime());
            postulacion.setFechaAplicacion(fecha);
            postulacionjpa.create(postulacion);
        }
        /*   public List<Postulante> ListaodosPostulantes(Integer idEmpresa){
        List<Postulante> alumnospostulantes = null;
        List<Postulante> alumnospostulantes2=null;
        RolController rolc= new RolController();
        List<Rol> listaroles = rolc.selectRoles();
        try{
        PostulantesController post = new PostulantesController();
        alumnospostulantes = post.ListaodosPostulantes(idEmpresa);
        WSAlumnoBC alumonBC = new WSAlumnoBC();
        alumnospostulantes2 = new ArrayList<Postulante>();
        int k=0;
        for(int i=0;i<alumnospostulantes.size();i++)
        {
        Alumno alumno = alumonBC.GetAlumnoXId(alumnospostulantes.get(i).getIdAlumno());
        Postulante postulante = alumnospostulantes.get(i);
        postulante.setIdPostulante(k); k++;
        postulante.setNombreAlumno(alumno.getNombreAlumno());
        postulante.setApellidoPaterno(alumno.getApellidoPaterno());
        postulante.setApellidoMaterno(alumno.getApellidoMaterno());
        postulante.setCodigoAlumno(alumno.getCodigoAlumno());
        //      postulante.setNombrerol(rol(postulante.getIdPuestoOfertado(), listaroles));
        alumnospostulantes2.add(postulante);
        }
        return alumnospostulantes2;
        }catch(Exception ex){
        return alumnospostulantes2;
        }
        }
        public String rol(int idPO , List<Rol> listaroles )
        {
        PuestoOfertado PO = new PuestoOfertado();
        PO = listPO.selectPuestoOfertadoById(idPO);
        for(int i=0;i<listaroles.size();i++)
        {
        if(listaroles.get(i).getIdRol()==PO.getIdRol())
        return listaroles.get(i).getNombreRol();
        }
        return null;
        }*/ catch (PreexistingEntityException ex) {
            Logger.getLogger(PostulacionController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(PostulacionController.class.getName()).log(Level.SEVERE, null, ex);
        }



     
    }


 /*   public List<Postulante> ListaodosPostulantes(Integer idEmpresa){

        List<Postulante> alumnospostulantes = null;
        List<Postulante> alumnospostulantes2=null;
        RolController rolc= new RolController();

         List<Rol> listaroles = rolc.selectRoles();
        try{
          PostulantesController post = new PostulantesController();
         alumnospostulantes = post.ListaodosPostulantes(idEmpresa);
        WSAlumnoBC alumonBC = new WSAlumnoBC();
        alumnospostulantes2 = new ArrayList<Postulante>();
        int k=0;
          for(int i=0;i<alumnospostulantes.size();i++)
           {
              Alumno alumno = alumonBC.GetAlumnoXId(alumnospostulantes.get(i).getIdAlumno());
              Postulante postulante = alumnospostulantes.get(i);
              postulante.setIdPostulante(k); k++;
              postulante.setNombreAlumno(alumno.getNombreAlumno());
              postulante.setApellidoPaterno(alumno.getApellidoPaterno());
              postulante.setApellidoMaterno(alumno.getApellidoMaterno());
              postulante.setCodigoAlumno(alumno.getCodigoAlumno());
        //      postulante.setNombrerol(rol(postulante.getIdPuestoOfertado(), listaroles));
              alumnospostulantes2.add(postulante);

          }
            return alumnospostulantes2;


          }catch(Exception ex){
              return alumnospostulantes2;
          }
    }
      public String rol(int idPO , List<Rol> listaroles )
    {
    PuestoOfertado PO = new PuestoOfertado();
      PO = listPO.selectPuestoOfertadoById(idPO);
        for(int i=0;i<listaroles.size();i++)
       {
           if(listaroles.get(i).getIdRol()==PO.getIdRol())
               return listaroles.get(i).getNombreRol();
        }
     return null;
    }*/
}
